// export {}
/**
 * 二分搜索法
 * @param arr 
 * @param target 
 */
const bs = (arr: number[], target: number) => {
    const len = arr.length;
    // 没有元素可以找
    if (len < 1) return;

    // s-e的取值范围 [s, e]
    let s = 0,
        e = arr.length - 1;

    /**
     * 比较l和目标元素的大小
     * @param l 
     * @param r 
     */
    const compare = (l: number) => arr[l] - target;

    // 不断的往中间查找
    while (s <= e) {
        const m = (s + e) >> 1
        // 中间元素大于target, 往前找
        if (compare(m) > 0) { // [s, m-1]
            e = m - 1;
        } else if (compare(m) < 0) { // [m + 1, e]
            // 中间元素小于target, 往后找
            s = m + 1
        } else { 
            return true
        }
    }
    // 遍历完了都没找到，说明不存在
    return false;
}

const array = [1, 2, 3, 4, 5, 6];

for (let i = 1; i <= 7; i++) {
    console.log(bs(array, i));
}

export{}